package com.hxt.framework.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class HanyuUtil

{

    private static HanyuPinyinOutputFormat format = null;

    private static String[] pinyin= null;


    // 转换单个字符

    public static String getCharacterPinYin(char c)

    {
    	 format = new HanyuPinyinOutputFormat();

         format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        try
        {
            pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);

        }

        catch (BadHanyuPinyinOutputFormatCombination e)
        {

            e.printStackTrace();

        }

        // 如果c不是汉字，toHanyuPinyinStringArray会返回null

        if (pinyin == null)
            return null;

        // 只取一个发音，如果是多音字，仅取第一个发音

        return pinyin[0];

    }

    // 转换一个字符串

    public static String  getStringPinYin(String str)

    {

        StringBuilder sb = new StringBuilder();

        String tempPinyin = null;

        for (int i = 0; i < str.length(); ++i)

        {

            tempPinyin = getCharacterPinYin(str.charAt(i));

            if (tempPinyin == null)
            {

                // 如果str.charAt(i)非汉字，则保持原样
                if(i < str.length() -1 && !String.valueOf(str.charAt(i)).equals(" "))
                {
                    sb.append(String.valueOf(str.charAt(i)).toUpperCase()).append(" ");
                }
                else
                {
                    sb.append(String.valueOf(str.charAt(i)).toUpperCase());
                }
            }
            else
            {
                if(i < str.length() -1)
                {
                    sb.append(tempPinyin.toUpperCase()).append(" ");
                }
                else
                {
                    sb.append(tempPinyin.toUpperCase());
                }

            }

        }

        return sb.toString();

    }
    // 转换一个字符串

    public static String getStringPinYinWithOutZM(String str)

    {

        StringBuilder sb = new StringBuilder();

        String tempPinyin = null;
        
        for (int i = 0; i < str.length(); ++i)
            
        {
            
            tempPinyin = getCharacterPinYin(str.charAt(i));
            
            if (null != tempPinyin)
            {
                sb.append(tempPinyin.toUpperCase());
            }
        }
        
        return sb.toString();
    }
    
    public static void main(String[] args) {
//    	getStringPinYin();
	}

}